package br.com.cfccultura.admin.control.actions.pontoeletronico;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.stereotype.Component;

import br.com.cfccultura.admin.control.actions.DefaultAction;
import br.com.cfccultura.admin.control.forms.pontoeletronico.PontoEletronicoConsultarForm;
import br.com.cfccultura.admin.model.enums.TipoFuncionario;
import br.com.cfccultura.admin.model.vo.Funcionario;
import br.com.cfccultura.admin.model.vo.PontoEletronico;

@Component("/pontoEletronico")
public class PontoEletronicoAction extends DefaultAction {
	
	private static final Logger logger = Logger.getLogger(PontoEletronicoAction.class); 
	
	public ActionForward entrada(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		PontoEletronico vo = getFuncionarioDAO().consultaPontoAtual(getUsuario(request));
		if(vo == null) {
			vo = new PontoEletronico();
			vo.setIpEntrada(request.getRemoteAddr());
			vo.setFuncionario(getUsuario(request));
			getFuncionarioDAO().entrada(vo);
			logger.info("Entrada registrada: " + vo.getFuncionario().getLogin() + " - ip: " + vo.getIpEntrada());
		}
		
		return null;
	}
	
	public ActionForward saida(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		PontoEletronico vo = getFuncionarioDAO().consultaPontoAtual(getUsuario(request));
		if(vo != null) {
			vo.setFuncionario(getUsuario(request));
			vo.setIpSaida(request.getRemoteAddr());
			getFuncionarioDAO().saida(vo);
			logger.info("Saida registrada: " + vo.getFuncionario().getLogin() + " - ip: " + vo.getIpSaida());
		}
		
		return null;
	}
	
	public ActionForward consultarIniciar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		return mapping.findForward("consultar");
	}
	
	public ActionForward consultar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		PontoEletronicoConsultarForm pontoForm = (PontoEletronicoConsultarForm) form;
		
		PontoEletronico vo = new PontoEletronico();
		vo.setUsuarioSistema(getUsuario(request));
		if(getUsuario(request).getTipo().equals(TipoFuncionario.ADMINISTRATIVO)) {
			vo.setFuncionario(new Funcionario(pontoForm.getFuncionario()));
		} else {
			vo.setFuncionario(getUsuario(request));
		}
		vo.setEntrada(getDateFormatDojo().parse(pontoForm.getDe()));
		vo.setSaida(getDateFormatDojo().parse(pontoForm.getAte()));
		
		List<PontoEletronico> listaResultado = getFuncionarioDAO().consultaPontoEletronico(vo);
		int totalHoras = 0;
		int totalMinutos = 0;
		
		for(PontoEletronico ponto : listaResultado) {
			totalHoras += ponto.getHora();
			totalMinutos += ponto.getMinutos();
		}
		
		int resto = totalMinutos % 60;
		totalMinutos = totalMinutos / 60;
		totalHoras += totalMinutos;
		int arredondamento = totalHoras;
		if(resto >= 40) {
			arredondamento = totalHoras + 1;
		}
		
		if(listaResultado.size() > 0) {
			request.setAttribute("listaResultado", listaResultado);
			request.setAttribute("totalHoras", totalHoras + ":" + (resto < 10 ? "0" + resto : resto));
			request.setAttribute("arredondamento", arredondamento + " horas");
		}
		
		return mapping.findForward("consultar");
	}
}